<?php
/**
 * 框架入口文件
 */
if(!defined('CORE_DIR')) exit('Access Denied!');

/**
* 框架版本
*/
define('CORE_VERSION','CorePHP Version 1.0 beta');

/**
* 默认全局环境配置
*/
@set_time_limit(0);
@set_magic_quotes_runtime(0);
@error_reporting(E_ALL ^ E_NOTICE);
@date_default_timezone_set('PRC');
session_start();

/**
 * 自定义异常接口
 */
 set_exception_handler('exception_handler');

/**
*对POST和GET提交的数据进行过滤和转义
*/
$_POST = filter($_POST); //过滤POST数据
$_GET = filter($_GET); //过滤GET数据

/**
*框架基础类
*/
class Core{

   static public $_filePath = array();  //自动加载类搜索目录
   static public $_config = null;  //配置
   //构造函数
   public function __construct()
   {
	//Core类只能用静态模式调用
	exception_handler('Core类只能用静态模式调用');
   }

  //导入搜索路径
  static public function import($filePath)
  {
  	array_push(self::$_filePath,$filePath);
  }

  //加载类库
  static public function loadClass($classname)
  {
       foreach (self::$_filePath as $path){
             $classFile = $path.$classname.'.php';
             if(is_file($classFile)){
		require_once($classFile);
		if (!class_exists($classname)){
                    exception_handler($classname.' 类未定义');
		}
                return true;
             }
        }
        exception_handler($classname.' 类文件不存在');
   }

   //加载配置文件
   static public function loadConfig($fileName)
   {
       if(is_file($fileName)){
           self::$_config = require_once($fileName);
       }else{
           exception_handler('配置文件不存在');
       }
   }

   //获取配置
   static public function getConfig($key)
   {
       if(!is_null(self::$_config)){
           return self::$_config[$key];
       }else{
           exception_handler('配置文件未加载');
       }
   }

}

/**
*核心公用函数
*/

//简单自动加载类库
function __autoload($classname)
{
    if (class_exists($class_name, false) || interface_exists($class_name, false)) {
        return false;
    }
   Core::loadClass($classname);
}

/**
 * 显示应用程序执行路径，通常用于调试
 *
 * @package Core
 *
 * @return string
 */
function dump_trace()
{
    $debug = debug_backtrace();
    $lines = '';
    $index = 0;
    for ($i = 0; $i < count($debug); $i++) {
        if ($i == 0) { continue; }
        $file = $debug[$i];
        if ($file['file'] == '') { continue; }
        if (substr($file['file'], 0, strlen(FLEA_DIR)) != FLEA_DIR) {
            $line = "#<strong>{$index} {$file['file']}({$file['line']}): </strong>";
        } else {
            $line = "#{$index} {$file['file']}({$file['line']}): ";
        }
        if (isset($file['class'])) {
            $line .= "{$file['class']}{$file['type']}";
        }
        $line .= "{$file['function']}(";
        if (isset($file['args']) && count($file['args'])) {
            foreach ($file['args'] as $arg) {
                $line .= gettype($arg) .':'.$arg. ', ';
            }
            $line = substr($line, 0, -2);
        }
        $line .= ')';
        $lines .= $line . "\n";
        $index++;
    }

    if (ini_get('html_errors')) {
        return nl2br(str_replace(' ', '&nbsp;', $lines));
    } else {
        return $lines;
    }
}

//模拟自定义异常处理
function exception_handler($exception)
{
	$err = array();
	$err['debug'] = dump_trace();
	$err['msg'] = $exception;
	require_once( CORE_DIR.'exception.php' );
	exit();
}

/**
 * URL重定向
 * @param string $url URL地址
 * @param integer $time 秒数
 */
function redirect($url=null,$time=null)
{
	if($time==null){
		header("location:$url");
	}else{
		echo "<meta http-equiv=\"refresh\" content=\"$time; url=$url\">";
	}
	exit;
}


//过滤GPC数据
function filter($value)
{
	if(!get_magic_quotes_gpc())
	{
		if( is_array( $value ) )
		{
			foreach($value as $key => $val){
				$value[$key] = filter($val);
                        }
		}else{
			$value = addslashes(trim($value));
		}
	}
     return $value;
}

//调试输出
function dump($val)
{
	if (is_array($val) || is_object($val))
	{
		echo '<pre>';
		print_r($val);
		echo '</pre>';
	}else{
		echo $val;
	}
}


?>